﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Collections;
using Portal.Web.Model;
using Portal.Exam.Bussiness;
using Portal.Exam.Model;
using Portal.Web.Utility;
using Portal.Core;

namespace Portal.Exam.Render
{
    public class PrintExamStudent
    {
        public static AjaxOut Draw(string SiteId)
        {
            AjaxOut OAjaxOut = new AjaxOut();
            try
            {
                WebSessionUtility.CheckSessionTimeOut();

                string ExamRoomId = (string)WebEnvironments.Request(SiteId, "ExamRoomId");
                ExamRoomCls OExamRoom = new ExamRoomBll().CreateModel(SiteId, ExamRoomId);
                if (OExamRoom == null) throw new Exception("Tham số không hợp lệ!");
                DataTable dtExamRoomStudent = new ExamRoomStudentBll().ReadingExamRoomStudent(SiteId, ExamRoomId, "");
                string Html = "";
                for (int iIndex = 0; iIndex < dtExamRoomStudent.Rows.Count; iIndex++)
                {
                    string ExamRoomStudentId = (string)dtExamRoomStudent.Rows[iIndex]["ExamRoomStudentId"];
                    Html += DrawForStudent(SiteId, ExamRoomStudentId).HtmlContent;
                }
                OAjaxOut.HtmlContent = Html;
            }
            catch (Exception ex)
            {
                OAjaxOut.Error = true;
                OAjaxOut.HtmlContent = ex.Message.ToString();
                OAjaxOut.InfoMessage = ex.Message.ToString();
            }
            return OAjaxOut;
        }


        public static AjaxOut DrawForStudent(string SiteId, string ExamRoomStudentId)
        {
            AjaxOut OAjaxOut = new AjaxOut();
            try
            {
                ExamRoomStudentCls OExamRoomStudent = new ExamRoomStudentBll().CreateModel(SiteId, ExamRoomStudentId);
                if (OExamRoomStudent == null) throw new Exception("Tham số không hợp lệ!");
                DataTable dtExamQuestion = new ExamQuestionBll().ReadingExamQuestion(SiteId, ExamRoomStudentId);
                string RetHtml =
                    " <div class=header>\r\n" +
                    "     <table>\r\n" +
                    "           <tr>\r\n" +
                    "               <td class=c1>\r\n" +
                    "                   <div>BỘ GIÁO DỤC VÀ ĐÀO TẠO</div>\r\n" +
                    "                   <div>Trường đại học Y Hải Phòng</div>\r\n" +
                    "               </td>\r\n" +
                    "               <td class=cmid>&nbsp;</td>\r\n" +
                    "               <td class=c2>\r\n" +
                    "                   <div>CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM</div>\r\n" +
                    "                   <div>Độc lập - Tự do - Hạnh phúc</div>\r\n" +
                    "                   <div> -----------oOo------------</div>\r\n" +
                    "               </td>\r\n" +
                    "           </tr>\r\n" +
                    "     </table>\r\n" +
                    " </div>\r\n" +
                    " <div class=CssExamInfo>Khóa: ........................./ Lớp: ...............</div>\r\n" +
                    " <div class=CssHeading>Đề thi cho thí sinh - " + OExamRoomStudent.StudentCode + " / " + OExamRoomStudent.StudentName + " / Số điểm: " + OExamRoomStudent.DonePoint + "/" + OExamRoomStudent.TotalPoint + "</div>\r\n" +
                    " <div class=CssExamInfo>Môn thi: " + OExamRoomStudent.ExamTitle + "</div>\r\n" +
                    " <div class=CssExamInfo>Ngày thi: .........................\r\n" +
                    " <div class=CssMarkInfo>\r\n" +
                    "       <table>\r\n" +
                    "           <tr>\r\n" +
                    "               <td class=c1>Điểm thi của bài thi</td>\r\n" +
                    "               <td class=c2>Họ tên và chữ ký</td>\r\n" +
                    "               <td class=c3>Số phách<div>(Do chủ tịch HD chấm ghi chú)</div></td>\r\n" +
                    "           </tr>\r\n" +
                    "           <tr>\r\n" +
                    "               <td class=c1><table class=tdInner><tr><td>Bằng số</td><td>Bằng chữ</td></tr></table></td>\r\n" +
                    "               <td class=c2><div class=CssAlignLeft>Giám khảo 1</div><div class=CssAlignLeft>.........................................................................</div><div class=CssAlignLeft>Giám khảo 2</div><div class=CssAlignLeft>.........................................................................</div></td>\r\n" +
                    "               <td class=c3></td>\r\n" +
                    "           </tr>\r\n" +
                    "       </table>\r\n" +
                    " </div>\r\n" +
                    " <div class=CssStartExam>Hoàn thành " + dtExamQuestion.Rows.Count.ToString("#,##") + " câu hỏi dưới đây</div>\r\n" +
                    " <div class=CssExamContent>\r\n" +
                    " <ul>\r\n";

                for (int iIndex = 0; iIndex < dtExamQuestion.Rows.Count; iIndex++)
                {
                    string ExamQuestionId = (string)dtExamQuestion.Rows[iIndex]["ExamQuestionId"];
                    RetHtml += "  <li>" + DrawOneQuestion(SiteId, dtExamQuestion, iIndex, ExamRoomStudentId, ExamQuestionId).HtmlContent + "</li>\r\n";
                }
                RetHtml += "</ul>\r\n" +
                         "</div>\r\n" +
                         "<div class=break></div>\r\n";
                OAjaxOut.HtmlContent = RetHtml;
            }
            catch (Exception ex)
            {
                OAjaxOut.Error = true;
                OAjaxOut.HtmlContent = ex.Message.ToString();
                OAjaxOut.InfoMessage = ex.Message.ToString();
            }
            return OAjaxOut;
        }


        public static AjaxOut DrawOneQuestion(
            string SiteId,
            DataTable dtExamQuestion,
            int QuestionIndex,
            string ExamRoomStudentId,
            string ExamQuestionId)
        {
            AjaxOut OAjaxOut = new AjaxOut();
            try
            {
                string Html = "";
                string Title = (string)dtExamQuestion.Rows[QuestionIndex]["Title"];
                string Question = (string)dtExamQuestion.Rows[QuestionIndex]["Question"];
                string Type = (string)dtExamQuestion.Rows[QuestionIndex]["Type"];
                string StudentAnswer = (string)dtExamQuestion.Rows[QuestionIndex]["StudentAnswer"];
                int QuestionCorrectAnswer = int.Parse(dtExamQuestion.Rows[QuestionIndex]["CorrectAnswer"].ToString());

                if (string.IsNullOrEmpty(Question))
                {
                    Html += "<div class=CssQuestionTitle>Câu " + (QuestionIndex + 1) + ": " + Title + "</div>\r\n";
                }
                else
                {
                    Html += "<div class=CssQuestionTitle>Câu " + (QuestionIndex + 1) + ": " + Question + "</div>\r\n";
                }
                DataTable dtAnswer = new ExamQuestionBll().ReadingExamAnswer(SiteId, ExamQuestionId);
                if (Type.ToLower().Equals("YesNo".ToLower()))
                {
                    Html += "<div class=CssQuestionType>Chọn phương án Đúng hoặc Sai/div>\r\n" +
                            "<div><span class=CssCheck>[ ]</span> Đúng        <span class=CssCheck>[ ]</span> Sai</div>\r\n";
                }
                if (Type.ToLower().Equals("bestanswer"))
                {
                    //doan nay lay thong so tra loi
                    Html += "<div class=CssQuestionType>Chọn 1 phương án đúng trong các phương án dưới đây</div>\r\n" +
                            "<div class=CssListAnswer>\r\n" +
                            "<ul>\r\n";

                    for (int iIndex = 0; iIndex < dtAnswer.Rows.Count; iIndex++)
                    {
                        string AnswerText = (string)dtAnswer.Rows[iIndex]["AnswerTextFirst"];
                        Html += "   <li><span class=CssCheck>[ ]</span> " + AnswerText + "</li>\r\n";
                    }
                    Html +=
                        "</ul>\r\n" +
                        "</div>\r\n";
                }
                if (Type.ToLower().Equals("multichoice"))
                {
                    //doan nay lay thong so tra loi
                    string[] ItemAnswerd = StudentAnswer.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
                    ArrayList ArrayListCorrectItemAnswer = new ArrayList();

                    Html += "<div class=CssQuestionType>Chọn vào các phương án đúng trong các phương án dưới đây</div>\r\n" +
                            "<div class=CssListAnswer>\r\n" +
                            "<ul>\r\n";

                    for (int iIndex = 0; iIndex < dtAnswer.Rows.Count; iIndex++)
                    {
                        string AnswerText = (string)dtAnswer.Rows[iIndex]["AnswerTextFirst"];
                        Html += "   <li><span class=CssCheck>[ ]</span> " + AnswerText + "</li>\r\n";
                    }
                    Html +=
                        "</ul>\r\n" +
                        "</div>\r\n";
                }

                if (Type.ToLower().Equals("truefalse"))
                {
                    //doan nay lay thong so tra loi
                    string[] ItemAnswerd = StudentAnswer.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
                    ArrayList ArrayListCorrectItemAnswer = new ArrayList();

                    Html += "<div class=CssQuestionType>Chọn cả phương án đúng và sai trong những phương án dưới đây (Điền vào dấu [] giá trị 'Đúng' hoặc 'Sai')</div>\r\n" +
                            "<div class=CssListAnswer>\r\n" +
                            "<ul>\r\n";

                    for (int iIndex = 0; iIndex < dtAnswer.Rows.Count; iIndex++)
                    {
                        string AnswerText = (string)dtAnswer.Rows[iIndex]["AnswerTextFirst"];
                        Html += "   <li><span class=CssCheck>[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]</span> " + AnswerText + "</li>\r\n";
                    }
                    Html +=
                        "</ul>\r\n" +
                        "</div>\r\n";
                }

                if (Type.ToLower().Equals("crosslink"))
                {
                    //doan nay lay thong so tra loi
                    string[] ItemAnswerd = StudentAnswer.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
                    ArrayList ArrayListCorrectItemAnswer = new ArrayList();

                    Html += "<div class=CssQuestionType>Điền vào dấu [] số thứ tự của cột bên trái tương ứng với câu trả lời đúng nhất cho các phương án dưới đây</div>\r\n" +
                            "<div class=CssListAnswer>\r\n" +
                             "<table class=cssUlAnswerText>";
                    DataTable dtItemsPA2 = new ExamQuestionBll().ReadingExamAnswerByAnswerTextLast(SiteId, ExamQuestionId);
                    for (int iIndex = 0; iIndex < dtAnswer.Rows.Count; iIndex++)
                    {
                        string tAnswerTextFirst = (string)dtAnswer.Rows[iIndex]["AnswerTextFirst"];
                        string pa2AnswerTextFirst = (string)dtItemsPA2.Rows[iIndex]["AnswerTextLast"];

                        Html +=
                           "  <tr>" +
                           "       <td class=\"tdFirstColAnswerPrin\">" + (iIndex + 1) + "." + tAnswerTextFirst + "</td>" +
                           "       <td width='80px'></td>" +
                           "       <td>[&nbsp;&nbsp;&nbsp;]&nbsp;&nbsp;</td>" +
                           "       <td></td>" +
                           "       <td>" + pa2AnswerTextFirst + "</td>" +
                           "  </tr>";
                    }
                    Html += "</table>" +
                        "</div>\r\n";
                }

                if (Type.ToLower().Equals("image"))
                {
                    //doan nay lay thong so tra loi
                    string[] ItemAnswerd = StudentAnswer.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
                    ArrayList ArrayListCorrectItemAnswer = new ArrayList();
                    DataTable dtItemsPA2 = new ExamQuestionBll().ReadingExamAnswerByAnswerTextLast(SiteId, ExamQuestionId);
                    SiteParam OSiteParam = WebEnvironments.CreateSiteParam(SiteId);

                    string QuestionId = (string)dtItemsPA2.Rows[0]["CorrectAnswer"];
                    string HttpDataRoot = Portal.Web.Utility.WebConfig.HttpDataRoot(OSiteParam);
                    HttpDataRoot = HttpDataRoot + "/Cms/" + WebSessionUtility.GetCurrentLoginUser().AssetCode + "/" + QuestionId;

                    string ImgName = (string)dtItemsPA2.Rows[0]["ImageFileName"];

                    string ImageUrl = string.Empty;
                    if (!string.IsNullOrEmpty(QuestionId) && !string.IsNullOrEmpty(ImgName))
                    {
                        ImageUrl = HttpDataRoot + "/" + ImgName;
                    }

                    Html += "<div class=CssQuestionType>Điền vào dấu [] số thứ tự của cột bên trái tương ứng với câu trả lời đúng nhất cho các phương án dưới đây</div>\r\n" +
                            "<div class=CssListAnswer>\r\n" +
                             "<table class=cssUlAnswerText>" +
                             "<th colspan=5><image src='" + ImageUrl + "' class='imgexam' /></th>";
                    
                    for (int iIndex = 0; iIndex < dtAnswer.Rows.Count; iIndex++)
                    {                        
                        string tAnswerTextFirst = (string)dtAnswer.Rows[iIndex]["AnswerTextFirst"];
                        string pa2AnswerTextFirst = (string)dtItemsPA2.Rows[iIndex]["AnswerTextLast"];                        
                        
                        Html +=
                           "  <tr>" +
                           "       <td class=\"tdFirstColAnswerPrin\">" + (iIndex + 1) + "." + tAnswerTextFirst + "</td>" +
                           "       <td width='80px'></td>" +
                           "       <td>[&nbsp;&nbsp;&nbsp;]&nbsp;&nbsp;</td>" +
                           "       <td></td>" +
                           "       <td>" + pa2AnswerTextFirst + "</td>" +
                           "  </tr>";
                    }
                    Html += "</table>" +
                        "</div>\r\n";
                }

                if (Type.ToLower().Equals("freetext"))
                {
                    Html += "<div class=CssQuestionType>Sinh viên viết bài tự luận dưới đây</div>\r\n" +
                            "<div class=CssListAnswer>\r\n";

                    for (int iIndex = 0; iIndex < 20; iIndex++)
                    {
                        Html += ".....................................................................................................................................................\r\n";
                    }

                    Html += "</div>\r\n";
                }
                OAjaxOut.HtmlContent = Html;
            }
            catch (Exception ex)
            {
                OAjaxOut.Error = true;
                OAjaxOut.InfoMessage = ex.Message.ToString();
            }
            return OAjaxOut;
        }

    }
}
